package org.example;



import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/**
 * Map 需要指定四个泛型，用来限定输入和输出的 key 和 value 的类型
 *
 * hadoop 有自己的数据类型，不使用 java 的数据类型，对应的 java 类型名字后面 + Writable 就是 hadoop 类型
 * String 除外，String 对于的 hadoop 类型叫做 Text
 *  <2, "java">
 * */
public class WordcountMapper extends Mapper<LongWritable, Text,Text,IntWritable> {
    //重写Ctrl+o
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        /**
         * 1、把一行字符串拆分成单词 "hello java"
         * 2、把单词、数字每一个按照 map 规定的格式输出
         */
        // 把 hadoop 类型转换为 java 类型(接收传入进来的一行文本，把数据类型转换为 String 类型)
        String line = value.toString();
        // 把字符串拆分为单词
        String[] words = line.split(" ");
        //使用 for 循环把单词数组胡每个单词输出
        for (String word : words){
            context.write(new Text(word), new IntWritable(1));
        }
    }
}
